package LeetCodeHot100;

/**
 * 7. 整数反转
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 *
 * 思路 ： 有符号数的反转，
 *       我们可以使用转为字符串去反转，或者使用一个栈按位去反转，但是这道题明显不是考察这个的
 *       这道题考察的是位运算，求余操作与整除操作， 然后必须考虑边界溢出问题，因为是有符号数
 *       不用考虑负数，负数也是有符号位上 为 1， 可以参与计算。
 */
public class LeetCode07 {
    public int reverse(int x) {
        int res = 0;
        while (x!=0){
            // 每次取末尾的数字
            int tmp = x % 10;
            // 关键点，主要是考虑边界问题, x/10 小于 int值最小， 或者 x/10 > int值最大,这种数值溢出计算，默认返回0
            if(res > Integer.MAX_VALUE/10 || res < Integer.MIN_VALUE/10){
                return 0;
            }
            res = res*10 + tmp;
            x = x/10;
        }
        return res;
    }

    public static void main(String[] args) {
        LeetCode07 l1 = new LeetCode07();
        int x =-154512154;
        int reverse = l1.reverse(x);
        System.out.println(reverse);
    }
}
